#ifndef DIRECTORY_H_
#define DIRECTORY_H_

#include "../../include/defs.h"
#include "../../include/fileSystem/inode.h"
#include "../../include/fileSystem/dirent.h"

//agrega una entrada al directorio dir, actualiza el dirSize
void addDirEntry(dirEntry * dir, char * name, int inodeNum, int * dirSize, char type);

//borra una entrada del directorio dir, actualiza el dirSize. devuelve -1
//en caso de error, o el numero de inodo de la entrada borrada
int rmDirEntry(dirEntry * dir, char * name, int * dirSize);

//busca en un directorio el archivo name. devuelve su numero de inodo
//o -1 si no lo encontro
int searchDir(dirEntry * dir, int dirSize, char * name);

//parsea el path hasta encontrar el primer '/' o '\0'. deja en dest el nombre
//del archivo o directorio parseado, y devuelve el puntero a path actualizado
char * parsePath(char * dest, char * path);

//busca en el path el nombre del archivo o del ultimo directorio
void getNameFromPath(char * dest, char * path);

//busca en el directorio apuntado por dirInode oldName, y lo reemplaza por
//newName. Devuelve -1 en caso de error, un numero mayor a 0 en caso de exito
int renameDirEntry(inodeTableEntry * dirInode, char * oldName, char * newName);

//deja en dest el directorio actual si su longitud es menor a size y lo
//devuelve, sino devuelve NULL
char * getcwdImpl(char * dest, int size);

//crea un nuevo directorio. devuelve -1 en caso de error
int mkdirImpl(char * pathName, short int mode);

//trata de abrir un directorio. devuelve -1 en caso de error
int opendirImpl(char * pathName);

//cierra el directorio referenciado por el file descriptor fd
void closedirImpl(int fd);

//trata de borrar un directorio. El directorio debe estar vacio.
//Devuelve -1 en caso de error.
int rmdirImpl(const char * pathParam);

//deja una entrada del directorio en entry, y queda apuntando a la proxima.
//devuelve -1 en caso de error o si se acabaron las entradas
int readdirImpl(int fd, dirEntry * entry);

//trata de cambiar el directorio actual del proceso que hizo la llamada
//devuelve -1 en caso de error
int chdirImpl(char * path);

#endif /* DIRECTORY_H_ */
